package com.example.demo.config;


import com.example.demo.common.ApplicationVariable;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * 关于登陆的一个拦截器，同时还需要进行配置拦截规则
 */
@Component  // 加上注解，交给spring托管
public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //return HandlerInterceptor.super.preHandle(request, response, handler);

        // 判断用户登录
        HttpSession session = request.getSession(false); // false 表示没有就不创建
        /**
         * 注意此处是 && 的关系，不是 || 的关系，会出错的，空指针异常
         */
//        if(session != null || session.getAttribute(ApplicationVariable.SESSION_KEY_USERINFO) != null) {
        if (session != null && session.getAttribute(ApplicationVariable.SESSION_KEY_USERINFO) != null) {
            // 用户已经登陆
            return true;
        }
        // 当代码执行到说明用户未登录，
        /**
         * 企业中正确的做法是给前端返回一个统一数据的 未登录信息，前端所有需要判断用户是否登录的地方都去判断，很麻烦
         * 在此我们方便做法 直接后端跳转
         * 企业不直接跳转的原因是 有可能跳转到不同的页面，比如 手机端和pc端的
         */
        response.sendRedirect("/login.html");
        return false;
    }
}
